home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / cmds / bibtex / bibext.c < prev    next >
C/C++ Source or Header  |  1989-07-07  |  3KB  |  166 lines

  1. /*
  2.  * Auxilliary routines for BibTeX in C.
  3.  *
  4.  * Tim Morgan 2/15/88
  5.  * Eduardo Krell 4/21/88
  6.  */
  7.  
  8. #include <stdio.h>
  9. #ifdef    BSD
  10. #include <string.h>
  11. #else
  12. #include <strings.h>
  13. #endif
  14. #include "site.h"
  15.  
  16. #define TRUE 1
  17. #define FALSE 0
  18. #define filenamesize 1024
  19. extern char realnameoffile[];
  20. extern schar xord[], buffer[];
  21. extern char nameoffile[];
  22. char **gargv;
  23. int gargc;
  24.  
  25. static char input_path[filenamesize], bib_path[filenamesize];
  26.  
  27. FILE *openf(name, mode)
  28. char *name, *mode;
  29. {
  30.     FILE *result;
  31.  
  32.     result = fopen(name, mode);
  33.     if (!result) {
  34.     perror(name);
  35.     exit(1);
  36.     }
  37.     return(result);
  38. }
  39.  
  40. int eoln(f)
  41. FILE *f;
  42. {
  43.     register int c;
  44.  
  45.     if (feof(f)) return(1);
  46.     c = getc(f);
  47.     if (c != EOF)
  48.     (void) ungetc(c, f);
  49.     return (c == '\n' || c == EOF);
  50. }
  51.  
  52. void lineread(f, size)
  53. FILE *f;
  54. int size;
  55. {
  56.     extern long last;
  57.     register int in;
  58.  
  59.     last = 0;
  60.     while (last < size && (in = getc(f)) != EOF && in != '\n') {
  61. #ifdef    NONASCII
  62.     buffer[last++] = xord[in];
  63. #else
  64.     buffer[last++] = in;
  65. #endif
  66.     }
  67.     while (in != EOF && in != '\n')    /* Skip past eoln if buffer full */
  68.     (void) getc(f);
  69. }
  70.  
  71. void setpaths()
  72. {
  73.     extern char *getenv();
  74.     char *p;
  75.  
  76.     if (p = getenv("TEXINPUTS"))
  77.     (void) strcpy(input_path, p);
  78.     else
  79.     (void) strcpy(input_path, TEXINPUTS);
  80.     if ((p = getenv("BIBINPUTS")) || (p = getenv("TEXBIB")))
  81.     (void) strcpy(bib_path, p);
  82.     else
  83.     (void) strcpy(bib_path, BIBINPUTS);
  84. }
  85.  
  86.  
  87. int ztestaccess(wam, filepath)
  88. int wam, filepath;
  89. {
  90.     char *path = NULL;
  91.     register int ok;
  92.     int f;
  93.  
  94.     if (filepath == 1)
  95.     path = input_path;
  96.     else if (filepath == 2)
  97.     path = bib_path;
  98.     if (nameoffile[0] == '/')
  99.     path = NULL;
  100.     do {
  101.     packrealnameoffile(&path);
  102.     if (wam == 4)
  103.         if (access(realnameoffile, 4) == 0) ok = TRUE;
  104.         else ok = FALSE;
  105.         else {
  106.         f = creat(realnameoffile, 0666);
  107.         if (f >= 0) ok = TRUE;
  108.         else ok = FALSE;
  109.         if (ok)
  110.         (void) close(f);
  111.     }
  112.     }
  113.     while (!ok && path != NULL);
  114.     return(ok);
  115. }
  116.  
  117. static packrealnameoffile(cpp)
  118. char **cpp;
  119. {
  120.     register char *p, *realname;
  121.  
  122.     realname = realnameoffile;
  123.     if ((p = *cpp)) {
  124.     while ((*p != ':') && *p) {
  125.         *realname++ = *p++;
  126.         if (realname == &(realnameoffile[filenamesize-1]))
  127.         break;
  128.     }
  129.     if (*p == '\0') *cpp = NULL;
  130.     else *cpp = p+1;
  131.     *realname++ = '/';
  132.     }
  133.     p = nameoffile;
  134.     while (*p != ' ') {
  135.     if (realname >= &(realnameoffile[filenamesize-1])) {
  136.         fprintf(stderr, "! Full file name is too long\n");
  137.         break;
  138.     }
  139.     *realname++ = *p++;
  140.     }
  141.     *realname = '\0';
  142. }
  143.  
  144. int
  145. getcmdline(buf, n)
  146. char *buf;
  147. {
  148.     strncpy(buf, gargv[1], n);
  149.     return (strlen(buf));
  150. }
  151.  
  152. main(argc, argv)
  153. char *argv[];
  154. {
  155.     extern schar history;
  156.     extern void main_body();
  157.     int status;
  158.  
  159.     gargc = argc;
  160.     gargv = argv;
  161.     setpaths();
  162.     main_body();
  163.     status = (history != 0);
  164.     exit(status);
  165. }
  166.